package com.baomidou.wechat.mp.apistore;

import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * ApiStore 返回结果
 */
public class ApiStoreResult {
	private static final Logger logger = LoggerFactory.getLogger(ApiStoreResult.class);
	/**
	 * 标识处理是否成功, 0: 表示成功, 其它值, 表示失败
	 */
	private int errNum;
	/**
	 * 错误类型说明
	 */
	private String errMsg;
	/**
	 * 返回内容集合
	 */
	private String retData;

	/**
	 * 全局返回码说明
	 */
	private final static Map<Integer, String> RETURN_CODE = new HashMap<Integer, String>();

	static {
		RETURN_CODE.put(0, "成功");
		RETURN_CODE.put(300101, "用户请求过期");
		RETURN_CODE.put(300102, "用户日调用量超限");
		RETURN_CODE.put(300103, "服务每秒调用量超限");
		RETURN_CODE.put(300104, "服务日调用量超限");
		RETURN_CODE.put(300201, "url无法解析");
		RETURN_CODE.put(300202, "请求缺少apikey，登录即可获取");
		RETURN_CODE.put(300203, "服务没有取到apikey或secretkey");
		RETURN_CODE.put(300204, "apikey不存在");
		RETURN_CODE.put(300205, "api不存在");
		RETURN_CODE.put(300206, "api已关闭服务");
		RETURN_CODE.put(300207, "余额不足，请充值");
		RETURN_CODE.put(300208, "未通过实名验证");
		RETURN_CODE.put(300209, "服务商响应status非200");
		RETURN_CODE.put(300301, "内部错误");
		RETURN_CODE.put(300302, "系统繁忙稍候再试");
	}

	/**
	 * 异常代码识别
	 *
	 * @param statusCode
	 *            异常代码
	 * @return 错误信息
	 */
	protected String getCause(int errNum) {
		if (RETURN_CODE.containsKey(errNum)) {
			return errNum + ":" + RETURN_CODE.get(errNum);
		}
		return errNum + ":操作异常";
	}

	/**
	 * 接口是否请求成功
	 */
	public boolean isOK() {
		if (logger.isDebugEnabled()) {
			logger.debug("apistore 接口请求说明：{}", getCause(errNum));
		}
		if (errNum == 0) {
			return true;
		}
		return false;
	}

	public int getErrNum() {
		return errNum;
	}

	public void setErrNum(int errNum) {
		this.errNum = errNum;
	}

	public String getErrMsg() {
		return errMsg;
	}

	public void setErrMsg(String errMsg) {
		this.errMsg = errMsg;
	}

	public String getRetData() {
		return retData;
	}

	public void setRetData(String retData) {
		this.retData = retData;
	}

}
